Skip to content

Comments

feat: add set_evaluation_context method to OpenFeatureClient#565

Open
vikasrao23 wants to merge 2 commits intoopen-feature:mainfrom
vikasrao23:feat/client-evaluation-context-setter
Open

feat: add set_evaluation_context method to OpenFeatureClient#565
vikasrao23 wants to merge 2 commits intoopen-feature:mainfrom
vikasrao23:feat/client-evaluation-context-setter

Conversation

@vikasrao23
Copy link

Summary

Fixes #500

Implements a setter method for client-level evaluation context, allowing users to set a client-wide evaluation context that is properly merged during flag evaluation.

Changes

  • openfeature/client.py: Added set_evaluation_context(context) method to OpenFeatureClient class
  • tests/test_client.py: Added 3 comprehensive tests:
    1. test_client_set_evaluation_context - Verifies the setter works correctly
    2. test_client_set_evaluation_context_updates_existing - Verifies updating an existing context
    3. test_client_set_evaluation_context_is_merged_during_evaluation - Verifies proper context merging during flag evaluation

How it works

The client-level context is merged during flag evaluation with the following precedence (lowest to highest):

  1. API-level context (global, via api.set_evaluation_context())
  2. Transaction context (via api.set_transaction_context())
  3. Client contextNEW: set via client.set_evaluation_context()
  4. Invocation context (per flag evaluation call)
  5. Before hooks context (injected by hooks)

This matches the behavior described in the OpenFeature spec.

Example Usage

from openfeature import api
from openfeature.evaluation_context import EvaluationContext

# Get a client
client = api.get_client()

# Set client-level context
client.set_evaluation_context(EvaluationContext(
    targeting_key="user-123",
    attributes={
        "email": "user@example.com",
        "plan": "premium"
    }
))

# This context will be included in all flag evaluations from this client
value = client.get_boolean_value("feature-flag", False)

Testing

All existing tests pass, and new tests verify:

  • The setter correctly updates the client's context
  • Client context is properly merged with API, transaction, and invocation contexts
  • Context precedence is maintained (invocation > client > transaction > API)

Signed-off-by: vikasrao23 vikasrao23@users.noreply.github.com

Implements client-level evaluation context setter as requested in open-feature#500.

The OpenFeatureClient class now provides a set_evaluation_context() method
that allows users to set a client-wide evaluation context. This context is
properly merged during flag evaluation with the following precedence
(lowest to highest):

1. API-level context (global)
2. Transaction context
3. Client context (set via this new method)
4. Invocation context (per-evaluation)

Changes:
- Added set_evaluation_context(context) method to OpenFeatureClient class
- Added comprehensive tests verifying:
  * The setter correctly updates the client context
  * Client context is properly merged during flag evaluation
  * Context precedence is maintained

Closes open-feature#500

Signed-off-by: vikasrao23 <vikasrao23@users.noreply.github.com>
@gemini-code-assist
Copy link

Summary of Changes

Hello @vikasrao23, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request enhances the OpenFeatureClient by introducing a mechanism to set a client-level evaluation context. This new feature allows for more granular control over context management, ensuring that client-specific attributes are properly merged with other context levels (API, transaction, invocation, and hooks) during flag evaluation, adhering to the OpenFeature specification's precedence rules.

Highlights

  • Client-level Evaluation Context: Introduced a set_evaluation_context method to the OpenFeatureClient class, allowing users to define a client-specific evaluation context.
  • Context Merging Precedence: Clarified that the new client-level context is merged during flag evaluation, with precedence between API, transaction, client, invocation, and before hooks contexts, aligning with the OpenFeature specification.
  • Comprehensive Testing: Added three new tests to verify the correct functionality of the set_evaluation_context method, including updates and proper merging during evaluation.
Changelog
  • openfeature/client.py
    • Added the set_evaluation_context method to OpenFeatureClient.
  • tests/test_client.py
    • Added test_client_set_evaluation_context to verify the setter.
    • Added test_client_set_evaluation_context_updates_existing to confirm context updates.
    • Added test_client_set_evaluation_context_is_merged_during_evaluation to validate context merging precedence.
Activity
  • No specific review comments or activity have been recorded for this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a set_evaluation_context method to the OpenFeatureClient, allowing for dynamic updates to the client-level evaluation context. This new functionality is well-documented and thoroughly tested with three new comprehensive test cases, including verification of context merging precedence during flag evaluation. The changes align with the OpenFeature specification for context merging.

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Signed-off-by: Vikas Rao <100244218+vikasrao23@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE] client evaluation context support

1 participant